package com.xs.partnermatching.easyExcel;

import com.alibaba.excel.EasyExcel;

import java.util.List;

/**
 * @author xsf
 * @ClassName ImportExcel
 * @Description 导入Excel，读取数据
 * @date 2024/10/07
 * @version: 1.0
 */
public class ImportExcel {
    /**
     * 读取数据
     */
    public static void main(String[] args) {
        // 写法1：JDK8+，不用额外写一个DemoDataListner
        // Excel数据文件放在电脑上，能够找到路径
        String fileName = "doc/testExcel.xlsx";
        // synchronousRead (fileName);

        // 写法2：自定义监听器，读取数据
        readByListener(fileName);
    }

    /**
     * 监听器读取
     * 先创建监听器，在读取文件时绑定监听器
     * 单独抽离处理逻辑，代码清晰易于维护；一条一条处理，适用于数据量大的场景
     *
     * @param fileName 文件名
     */
    public static void readByListener(String fileName) {
        // 这里需要指定用哪个class去读，然后读取第一个sheet，文件流会自动关闭
        // 这里每次读取100条数据，然后返回过来，直接调用使用数据就行
        EasyExcel.read(fileName, XingQiuTableUserInfo.class, new TableListener()).sheet().doRead();
    }

    /**
     * 同步读，同步的返回
     * 无需创建监听器，一次性获取完整数据
     * 方便简单，但是数据量大时会有等待时长，也有可能内存溢出
     * 不推荐使用，如果数据量大会把数据放在内存里面
     *
     * @param fileName 文件名
     */
    public static void synchronousRead(String fileName) {
        // 这里需要指定用哪个class去读，然后读取第一个sheet，同步读取会自动finish
        List<XingQiuTableUserInfo> list = EasyExcel.read(fileName).head(XingQiuTableUserInfo.class).sheet().doReadSync();
        for (XingQiuTableUserInfo xingQiuTableUserInfo : list) {
            System.out.println(xingQiuTableUserInfo);
        }
    }
}
